import { createApp } from "vue";

import Cookies from "js-cookie";

import ElementPlus from "element-plus";
// 中文语言
import locale from "element-plus/lib/locale/lang/zh-cn";
import "element-plus/dist/index.css";
import "@/assets/styles/index.scss"; // global css
import "@/components/ElementRender/src/css/style.scss";

// vxe-table样式
import "./style/index.scss";
import App from "./App.vue";
import store from "./store";
import router from "./router";
import directive from "./directive"; // directive

// 注册指令
import plugins from "./plugins"; // plugins
import { download } from "@/utils/request";

// svg图标
import "virtual:svg-icons-register";
import SvgIcon from "@/components/SvgIcon/index.vue";
import elementIcons from "@/components/SvgIcon/svgicon";

import "./permission"; // permission control

import { useDict } from "@/utils/dict";
import { parseTime, resetForm, addDateRange, handleTree, selectDictLabel, selectDictLabels } from "@/utils/common";

import Logger from "@/utils/Logger";
// 文件上传组件
import FileUpload from "@/components/FileUpload/index.vue";
// 图片上传组件
import ImageUpload from "@/components/ImageUpload/index.vue";
// 图片预览组件
import ImagePreview from "@/components/ImagePreview/index.vue";
// 自定义树选择组件
import TreeSelect from "@/components/TreeSelect/index.vue";
// 字典标签组件
import DictTag from "@/components/DictTag/index.vue";

import { VXETable, VxeModuleFilter, VxeModuleMenu, VxeModuleEdit, VxeModuleExport, VxeModulePrint, VxeModuleKeyboard, VxeModuleValidator, VxeIcon, VxeColumn, VxeColgroup, VxeGrid, VxeToolbar, VxePager, VxeCheckbox, VxeCheckboxGroup, VxeRadio, VxeRadioGroup, VxeRadioButton, VxeInput, VxeTextarea, VxeButton, VxeModal, VxeTooltip, VxeForm, VxeFormItem, VxeFormGather, VxeSelect, VxeOptgroup, VxeOption, VxeSwitch, VxeList, VxePulldown, VxeTable, VxeLoading } from "../packages/all";
import "@/components/ElementRender";
const app = createApp(App);
// 全局方法挂载
app.config.globalProperties.useDict = useDict;
app.config.globalProperties.download = download;
app.config.globalProperties.parseTime = parseTime;
app.config.globalProperties.resetForm = resetForm;
app.config.globalProperties.handleTree = handleTree;
app.config.globalProperties.addDateRange = addDateRange;
app.config.globalProperties.selectDictLabel = selectDictLabel;
app.config.globalProperties.selectDictLabels = selectDictLabels;

app.config.globalProperties.Log = Logger;

// 全局组件挂载
app.component("DictTag", DictTag);
app.component("TreeSelect", TreeSelect);
app.component("FileUpload", FileUpload);
app.component("ImageUpload", ImageUpload);
app.component("ImagePreview", ImagePreview);

app.use(router);
app.use(store);
app.use(plugins);
app.use(elementIcons);
app.component("SvgIcon", SvgIcon);

directive(app);

app.use(VxeModuleFilter);
app.use(VxeModuleMenu);
app.use(VxeModuleEdit);
app.use(VxeModuleExport);
app.use(VxeModulePrint);
app.use(VxeModuleKeyboard);
app.use(VxeModuleValidator);

app.use(VxeIcon);
app.use(VxeColumn);
app.use(VxeColgroup);
app.use(VxeGrid);
app.use(VxeToolbar);
app.use(VxePager);
app.use(VxeCheckbox);
app.use(VxeCheckboxGroup);
app.use(VxeRadio);
app.use(VxeRadioGroup);
app.use(VxeRadioButton);
app.use(VxeInput);
app.use(VxeTextarea);
app.use(VxeButton);
app.use(VxeModal);
app.use(VxeSelect);
app.use(VxeOptgroup);
app.use(VxeOption);
app.use(VxeSwitch);
app.use(VxeTooltip);
app.use(VxeForm);
app.use(VxeFormItem);
app.use(VxeFormGather);
app.use(VxeList);
app.use(VxePulldown);
app.use(VxeTable);
app.use(VxeLoading);

// 使用element-plus 并且设置全局的大小
app.use(ElementPlus, {
    locale: locale,
    // 支持 large、default、small
    size: Cookies.get("size") || "default",
});

app.mount("#app");
